package br.com.lacibMusic.bean;

import br.com.lacibMusic.entidades.Gravadora;
import br.com.lacibMusic.entidades.Selo;
import br.com.lacibMusic.rn.GravadoraRN;
import br.com.lacibMusic.rn.SeloRN;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class GravadoraBean {

    private SeloRN seloRN = new SeloRN();
    private Selo selo = new Selo();
    private List<Selo> selos;
    private GravadoraRN gravadoraRN = new GravadoraRN();
    private Gravadora gravadora = new Gravadora();
    private List<Gravadora> gravadoras;
    private String renderLista = "1";

    public String getTitulo() {
        iniciarBean();

        return "Cadastro - Gravadora";
    }

    public void iniciarBean() {
        gravadoras = gravadoraRN.obterTodos();
        selos = null;
        renderLista = "1";
    }

    public GravadoraBean() {
        System.out.println("renderLista: " + renderLista);
    }

    public Gravadora getGravadora() {
        return gravadora;
    }

    public void setGravadora(Gravadora gravadora) {
        this.gravadora = gravadora;
    }

    public Selo getSelo() {
        return selo;
    }

    public void setSelo(Selo selo) {
        this.selo = selo;
    }

    public GravadoraRN getGravadoraRN() {
        return gravadoraRN;
    }

    public void setGravadoraRN(GravadoraRN gravadoraRN) {
        this.gravadoraRN = gravadoraRN;
    }

    public List<Gravadora> getGenerosMusicais() {
        if (gravadora == null) {
            gravadoras = gravadoraRN.obterTodos();
        }
        return gravadoras;
    }

    public void setGenerosMusicais(List<Gravadora> gravadoras) {
        this.gravadoras = gravadoras;
    }

    public SeloRN getSeloRN() {
        return seloRN;
    }

    public void setSeloRN(SeloRN seloRN) {
        this.seloRN = seloRN;
    }

    public List<Selo> getSelos() {
        if (selos == null) {
            selos = seloRN.obterTodosPorGravadora(gravadora);
        }
        return selos;
    }

    public void setSelos(List<Selo> selos) {
        this.selos = selos;
    }

    public void irExcluirGravadora() {
        renderLista = "5";
    }

    public void irExcluirSelo() {
        renderLista = "6";
    }
    
    public void irSelo() {
        renderLista = "3";
    }

    public void cancelarGravadora() {
        gravadoras = null;
        gravadora = null;
        renderLista = "1";
    }

    public void cancelarSelo() {
        selos = null;
        selo = null;
        renderLista = "3";
    }
    
    public void salvar() {
        if (!gravadoraRN.obterPorNome(gravadora.getNomeGravadora()).isEmpty()) {
            BeanUtil.criarMensagemDeErro("Erro ao salvar", "Verifique se já não existe gravadora cadastrado com este nome.");
        } else {
            if (gravadoraRN.salvar(gravadora)) {
                BeanUtil.criarMensagemDeInformacao("Operação Realizada com Sucesso", "Gravadora Salvo na Lista");
            } else {
                BeanUtil.criarMensagemDeErro("Erro ao salvar", "O Gravadora não pode ser salvo.");
            }
        }
        gravadora = null;
    }

    public void voltar() {
        gravadora = null;
        selos = null;
        selo = null;
        renderLista = "1";
    }

    public void novo() {
        if (gravadora == null) {
            gravadora = gravadoraRN.novo();
        }
        renderLista = "2";
    }

    public void excluirGravadora() {
        if (gravadoraRN.remover(gravadora)) {
            BeanUtil.criarMensagemDeInformacao("Gravadora Removido com sucesso.", "Gravadora: " + gravadora.getNomeGravadora());
        } else {
            BeanUtil.criarMensagemDeErro("Erro ao remover Gravadora.", "O Gravadora não pode ser removido.");
        }
        gravadora = null;
        voltar();
    }
    
     public void excluirselo() {
        if (seloRN.remover(selo)) {
            BeanUtil.criarMensagemDeInformacao("Selo Removido com sucesso.", "Selo: " + selo.getNomeSelo());
        } else {
            BeanUtil.criarMensagemDeErro("Erro ao remover Selo.", "O Selo não pode ser removido.");
        }
        selo = null;
        voltar();
    }


    public void salvarSelo() {
        if (!seloRN.obterPorNome(selo.getNomeSelo()).isEmpty()) {
            BeanUtil.criarMensagemDeErro("Erro ao salvar", "Verifique se já não existe selo cadastrado com este nome.");
        } else {
            try {
                selo.setGravadoraid(gravadora);
            } catch (Exception e) {
                BeanUtil.criarMensagemDeErro("Erro ao salvar", "Erro ao vincular selo a gravadora.");
            }
            if (seloRN.salvar(selo)) {
                BeanUtil.criarMensagemDeInformacao("Operação Realizada com Sucesso", "Selo Salvo na Lista");
            } else {
                BeanUtil.criarMensagemDeErro("Erro ao salvar", "O Selo não pode ser salvo.");
            }
        }
        selo = null;
    }

    public void voltarSelo() {
        selo = null;
        renderLista = "3";
    }

    public void novoSelo() {
        if (selo == null) {
            selo = seloRN.novo();
            selo.setGravadoraid(gravadora);
        }
        renderLista = "4";
    }

    public void excluirSelo() {
        if (seloRN.remover(selo)) {
            BeanUtil.criarMensagemDeInformacao("Selo Removido com sucesso.", "Selo: " + selo.getNomeSelo());
        } else {
            BeanUtil.criarMensagemDeErro("Erro ao remover Selo.", "O Selo não pode ser removido.");
        }
        selo = new Selo();
    }

    public List<Gravadora> getGravadoras() {
        return gravadoras;
    }

    public void setGravadoras(List<Gravadora> gravadoras) {
        this.gravadoras = gravadoras;
    }

    public String getRenderLista() {
        return renderLista;
    }

    public void setRenderLista(String renderLista) {
        this.renderLista = renderLista;
    }
}
